package com.jeesite.common.utils;

import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.mapper.JsonMapper;
import com.jeesite.modules.sys.entity.Organization;
import com.jeesite.modules.sys.utils.UserUtils;


/**
 * 获取登录组织工具类
 *
 * @author 码脑洞
 */
public class OrgUtil {

	private OrgUtil() {
	}

	/**
	 * 获取登录组织对象
	 */
	public static Organization getOrg() {
		try {
			String orgJsonStr = UserUtils.getLoginInfo().getParam("organization");
			if (StringUtils.isNotBlank(orgJsonStr)) {
				return JsonMapper.fromJson(orgJsonStr, Organization.class);
			}

			Object orgObj = UserUtils.getSubject().getSession().getAttribute("organization");
			if (orgObj instanceof Organization) {
				return (Organization) orgObj;
			}
		} catch (Exception e) {
			// 忽略异常，返回null
		}
		return null;
	}

	/**
	 * 获取erp数据库前缀
	 */
	public static String getErpPrefix() {
		Organization org = getOrg();
		if (org == null || StringUtils.isBlank(org.getErpDbName())
				|| StringUtils.isBlank(org.getErpDbSchemas())) {
			throw new RuntimeException("获取ERP数据库前缀失败：组织信息不完整");
		}
		return org.getErpDbName() + "." + org.getErpDbSchemas();
	}

	/**
	 * 获取数据库别名
	 */
	public static String getDbAlias() {
		Organization org = getOrg();
		if (org == null || StringUtils.isBlank(org.getDbAlias())) {
			throw new RuntimeException("获取数据库别名失败：组织信息不完整或未登录");
		}
		return org.getDbAlias();
	}

	/**
	 * 获取登录组织编码
	 */
	public static String getOrgCode() {
		Organization org = getOrg();
		if (org == null || StringUtils.isBlank(org.getOrgCode())) {
			throw new RuntimeException("获取组织编码失败：组织信息不完整或未登录");
		}
		return org.getOrgCode();
	}

	/**
	 * 获取登录组织名称
	 */
	public static String getOrgName() {
		Organization org = getOrg();
		if (org == null || StringUtils.isBlank(org.getOrgName())) {
			throw new RuntimeException("获取组织名称失败：组织信息不完整或未登录");
		}
		return org.getOrgName();
	}

	/**
	 * 获取登录组织id
	 */
	public static Long getOrgId() {
		Organization org = getOrg();
		if (org == null || org.getAutoId() == null) {
			throw new RuntimeException("获取组织ID失败：组织信息不完整或未登录");
		}
		return org.getAutoId();
	}

	/**
	 * 检查当前组织是否有效
	 */
	public static boolean isValid() {
		return getOrg() != null;
	}

}
